package com.demo.ex04.many2one.dao;

import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
//import org.hibernate.tutorial2.demo03.hql.entity.Cats;
//import org.hibernate.util.BaseHibernateDao;
//import org.hibernate.util.HibernateUtil;

public class CatsDao 
//extends BaseHibernateDao<Cats, Long>
{
//	//HQL:面向对象的HQL
//	//1.类对象查询,HQL中 select *可以省略直接from
//	public List<Cats> findAll1(){
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		
//		cats = (List<Cats>)session.createQuery("from Cats").list();
//		
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	
//	//2.property属性查询:只可以使用Object[]的List集合
//	public List<Object[]> findProperty(){
//		List<Object[]> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		
//		cats = (List<Object[]>)session.createQuery("select c.name,c.birthdate from Cats c").list();
//
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	
//	
//	//3.构造函数封装数据:
//	public List<Cats> findConstruct(){
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		
//		cats = (List<Cats>)session.createQuery("select new Cats(c.name,c.birthdate) from Cats c").list();
//		
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	
//	//连接：内连，左连，右连，全连（不常用）
//	//	fetch 抓取关联的数据，填充到对象
//	public List<Cats> findInnerJoin(){
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		
//		cats = (List<Cats>)session.createQuery("from Cats c inner join fetch  c.kittens").list();
//		
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	
//	public List<Cats> findLeftOuterJoin(){
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		//from Cats 		:LAZY 不会获取到kittens  :EAGER等效于left outer join fetch
//		//from Cats c left outer join fetch  c.kittens :LAZY 使用fetch  可以获取到kittens
//		//为了性能：往往选择默认使用FetchType.LAZY,在需要捉取关联数据的时候使用fetch关键字。
//		cats = (List<Cats>)session.createQuery("from Cats c left outer join fetch  c.kittens").list();
//		
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	//使用full join fetch 与 right join fetch是没有意义的。 因为关联的数据没有填充的对象。
//	public List<Cats> findRightOuterJoin(){
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		//from Cats 		:LAZY 不会获取到kittens  :EAGER等效于left outer join fetch
//		//from Cats c left outer join fetch  c.kittens :LAZY 使用fetch  可以获取到kittens
//		//为了性能：往往选择默认使用FetchType.LAZY,在需要捉取关联数据的时候使用fetch关键字。
//		cats = (List<Cats>)session.createQuery("from Cats c right outer join fetch  c.kittens").list();
//		//记得关闭：sb.append("kittens=" + kittens);// no Session
//		//cats = (List<Object[]>)session.createQuery("from Cats c right outer join   c.kittens").list();
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	
//	//from Document fetch all properties order by name
//	
//	
//	//传参：三种传参方式：
//	//1.+   字符串拼接 ：不建议   SQL注入  where 1=1
//	public List<Cats> findAppendString(String name){
//		String hql = "from Cats c where lower(c.name) like '%"+name+"%'";
//		
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		//from Cats 		:LAZY 不会获取到kittens  :EAGER等效于left outer join fetch
//		//from Cats c left outer join fetch  c.kittens :LAZY 使用fetch  可以获取到kittens
//		//为了性能：往往选择默认使用FetchType.LAZY,在需要捉取关联数据的时候使用fetch关键字。
//		cats = (List<Cats>)session.createQuery(hql).list();
//		//记得关闭：sb.append("kittens=" + kittens);// no Session
//		//cats = (List<Object[]>)session.createQuery("from Cats c right outer join   c.kittens").list();
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	
//	//2.?   占位符 ：建议   安全没有SQL注入	只可以传一个位置
//	public List<Cats> findAppendString2(String name){
//		String hql = "from Cats c where lower(c.name)  like ?";
//		
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		Query query = session.createQuery(hql);
//		query.setString(0, "%"+name+"%");
//
//		cats = (List<Cats>)query.list();
//		
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	
//	//3.:name   命名参数 ：建议+   安全没有SQL注入  可以传多个同名位置
//	public List<Cats> findAppendString3(String name){
//		String hql = "from Cats c where lower(c.name)  like :myName ";
//		
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		Query query = session.createQuery(hql);
//		query.setString("myName", "%"+name+"%");
//	
//		cats = (List<Cats>)query.list();
//		
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	
//	//其他查询方法:
//	//2.对象化查询Criteria方法
//	public List<Cats> findByCriteria(String name,Date birthdate){
//		
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		Criteria c = session.createCriteria(Cats.class);
//		
//		//from Cats c where c.name= name 
//		c.add(Restrictions.eq("name",name));//eq是等于，gt是大于，lt是小于,or是或
//		//from Cats c where c.name= name and  c.birthdate=birthdate
//		c.add(Restrictions.eq("birthdate",birthdate));//eq是等于，gt是大于，lt是小于,or是或
//		
//		cats =(List<Cats>)c.list();
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//	//3.动态分离查询DetachedCriteria
//	public List<Cats> findByDetachedCriteria(DetachedCriteria dc){
//		
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		
//		Criteria c = dc.getExecutableCriteria(session);	
//		cats =(List<Cats>)c.list();
//		
//		session.getTransaction().commit();
//		
//		return cats;
//	}
//
//	 //Service:
////	  DetachedCriteria dc = DetachedCriteria.forClass(Cats.class);
////	  String name = "admin";
////	  if (name != null)
////		  dc.add(Restrictions.eq("name", name));
////	  	Date age = new Date();
////	  if (age != null)
////		  dc.add(Restrictions.le("birthday", age));
////	  
////	  List<Cats> cats = dao.findByDetachedCriteria(dc);
////	  System.out.println("离线查询返回结果：" + cats);
//	//4.例子查询
//	//5.SQL查询: session.createSQLQuery(sql)
//	public List<Cats> findSQL(){
//		String sql = "select * from t_cats";
//		
//		List<Cats> cats = null;
//		Session session =  HibernateUtil.getSessionFactory().getCurrentSession();
//		session.beginTransaction();
//		
//		Query query = session.createSQLQuery(sql);
//		
//		cats = (List<Cats>)query.list();
//		
//		session.getTransaction().commit();
//		
//		return cats;
//	}

	//6.命名查询



}
